import subprocess
import pandas as pd
import os
from pathlib import Path
import re

# 找到 mdb_files 文件夹下的所有 mdb 文件
mdb_dir = "mdb_files"
mdb_files = [
    os.path.join(mdb_dir, file)
    for file in os.listdir(mdb_dir)
    if file.lower().endswith('.mdb')
    and os.path.isfile(os.path.join(mdb_dir, file))
]

# 创建 CSV 输出目录
csv_dir = "csv_files"
os.makedirs(csv_dir, exist_ok=True)

for mdb_path in mdb_files:
    try:
        # 获取数据库所有表名（兼容含空格表名）
        tables = subprocess.check_output(['mdb-tables', '-1', mdb_path], text=True).splitlines()

        # 构建规范化文件名基础（去除特殊字符）
        db_name = Path(mdb_path).stem.replace(' ', '_')
        db_name = re.sub(r'[^\w\-_]', '', db_name)  # 过滤非法字符[4,5](@ref)

        # 遍历所有数据表
        for table in tables:
            if not table.strip():  # 跳过空行
                continue

            # 生成 CSV 文件名（保留原表名特征）
            safe_table = table.strip().replace(' ', '_')
            csv_name = f"{db_name}_{safe_table}.csv"
            csv_path = os.path.join(csv_dir, csv_name)

            # 执行导出操作（带错误检测）
            with open(csv_path, 'w', encoding='utf-8') as f:
                subprocess.run(
                    ['mdb-export', mdb_path, table],
                    stdout=f,
                    check=True,
                    text=True
                )

            print(f"成功导出: {mdb_path} → {csv_path}")
    except subprocess.CalledProcessError as e:
        print(f"数据库 {mdb_path} 导出失败，错误类型: {e.returncode}")
    except Exception as e:
        print(f"处理 {mdb_path} 时发生意外错误: {str(e)}")

# 添加完整性校验
print(f"\n导出完成！共处理 {len(mdb_files)} 个数据库，输出目录: {os.path.abspath(csv_dir)}")
# csv_file = '/Users/hustquick/Downloads/读取结果/2025_02_20_1.csv'
# table_name = '250220_10_46_28'
#
# # 调用 mdb-export 并将结果写入到 CSV 文件
# with open(csv_file, 'w') as f:
#     subprocess.run(['mdb-export', mdb_file, table_name], stdout=f)
#
# # 使用 pandas 读取导出的 CSV 文件
# df = pd.read_csv(csv_file)
#
# # 查看数据
# print(df)
#
# # 读取各列的数据
# Tem1 = df.iloc[:, 1]
# Tem2 = df.iloc[:, 2]
# Tem3 = df.iloc[:, 3]
# Tem4 = df.iloc[:, 4]
# Tem5 = df.iloc[:, 5]
# Tem6 = df.iloc[:, 6]
# Tem7 = df.iloc[:, 7]
# Tem8 = df.iloc[:, 8]
# Tem9 = df.iloc[:, 9]
# Tem10 = df.iloc[:, 10]
# Tem11 = df.iloc[:, 11]
# Tem12 = df.iloc[:, 12]

